home *** CD-ROM | disk | FTP | other *** search
/ Aminet 31 / Aminet 31 (1999)(Schatztruhe)[!][Jun 1999].iso / Aminet / dev / basic / ace_ftp.lha / ACE_FTP / docs / achat.doc next >
Text File  |  1999-04-14  |  19KB  |  586 lines

  1. -----------------------------8<------------------------------
  2.  
  3.               __    __    __       __        __  _____
  4.              /  \  /  \  /  \     /  \ |  | /  \   |
  5.              |__|  |     |_       |    |__| |__|   |
  6.              |  |  |     |        |    |  | |  |   |
  7.              |  |  \__/  \__/     \__/ |  | |  |   |
  8.  
  9.                (ACE Conversations, Hints, And Tips)   
  10.  
  11.  
  12. Introduction
  13. ~~~~~~~~~~~~
  14.      This file is an attempt by myself and David Benn to gather together
  15. in one place as much as possible of the interaction taking place between 
  16. ACE users.  At the moment the format is very informal, but that may
  17. change in the future.  The various entries have been grouped together
  18. under the broad headings of:
  19.  
  20.      General Info (not directly related to code)
  21.      Help! (various Q&A's dealing with specific code problems)
  22.      Optimization Tips (David's long awaited optimization guide! :)
  23.  
  24.      This format is very much subject to change, and it is the hope of
  25. both David and myself that ACE users will send in many more entries.  As
  26. the file grows, the format will evolve.
  27.      Please send your submissions to this file to the ACE list, with a
  28. subject containing 'ACE CHAT submission' or something similar.
  29.  
  30.                                              Rich Allen
  31.                                              rico@wsnet.com
  32.  
  33. I'd just like to add a vote of thanks to Rich for putting this material
  34. together from ACE list archives and some messages I sent him. Credit also
  35. goes to him for dreaming up the name "ACHAT" :). 
  36.  
  37. It was my initial suggestion that led to Rich starting work on an ACE FAQ,
  38. but as he rightly pointed out to me recently, a FAQ is less appropriate 
  39. than what you now see before you.
  40.  
  41. ACHAT seems to be the natural place for my ACE source-level optimisation 
  42. guide, and I will add more to the Optimisation Tips section of this
  43. document as time goes by.
  44.  
  45. Let me repeat Rich's exhortation for input from other ACE list members. 
  46. The problem with the list is that unless archived, we can lose the distilled
  47. wisdom of its members. This project is an effort to prevent that.
  48.  
  49. Enjoy.
  50.                         David Benn
  51.                         D.Benn@appcomp.utas.edu.au
  52.  
  53.  
  54. General Info
  55. ~~~~~~~~~~~~
  56.    1) Where can I get ACE?
  57.    2) Where are the FDs?
  58.    3) How can I print ace.doc easily?
  59.  
  60.  
  61. 1) Where can I get the latest version of ACE?
  62.  
  63.    You can get it from:
  64.  
  65.      Aminet sites in dev/basic
  66.    or
  67.      ftp.appcomp.utas.edu.au in /pub/ACE/dist
  68.  
  69.    The latter is David Benn's local FTP site and has little traffic.
  70.    You might also want to try the ACE WWW page if you have access to a
  71.    web browser.  The URL is:
  72.  
  73.      http://www.appcomp.utas.edu.au/users/dbenn/
  74.  
  75. ****
  76.  
  77. 2) Where can I get the FDs for the most common libraries?
  78.  
  79.    You can obtain the FDs by anonymous FTP from:
  80.  
  81.      ftp.dfv.rwth-aachen.de (/cdrom/bbs/cbm)
  82.  
  83.    You need the file:
  84.  
  85.      nduk-vNN.lha 
  86.  
  87.    where NN is the version number of your Amiga's OS. Use the VERSION command 
  88.    from the shell to determine this (eg. Wb 2.04 is version 37, Wb 3.0 is
  89.    version 39 and Wb 3.1 is version 40). This will give you includes, FDs etc.
  90.  
  91.    Also (from Bill Maddock):
  92.  
  93.    You can get the .fd files for versions 37, 38, 39 & 40 of the OS from the 
  94.    fresh fish CD-ROM volume 7 (or someone who has it with THEIR cd-rom drive) 
  95.    or you can get the version 34 .fd files off of a workbench extras 1.3 disk. 
  96.    Not very adequate, I know, but if you're not doing version-specific stuff, 
  97.    they should suffice.
  98.  
  99. ****
  100.  
  101. 3) How can I print ace.doc easily (page-wise).
  102.  
  103. Compile and run ACE:utils/pager/pager.b specifying ace.doc as the file to 
  104. be printed when prompted on the command line.
  105.  
  106. ****
  107.  
  108.  
  109. HELP! (Q&A's)
  110. ~~~~~~~~~~~~~
  111.    1) Array trouble
  112.    2) Default string size
  113.    3) Event handling
  114.    4) Modifying slider gadgets
  115.    5) SLEEP and INKEY$ from the CLI/SHELL
  116.    6) Reading special keys (eg. shift, ctrl, arrow keys, F1..F10)
  117.    7) Software reboot
  118.    8) Window titlebar 
  119.    9) C structures vs ACE structures.
  120.  
  121. 1) I DIMensioned a string array using the SIZE option.  When the array is 
  122. filled with strings of the size I specified in the DIM statement, I get weird
  123. results.  Why aren't the array elements storing my strings?
  124.  
  125.       It sounds as if the terminating null character is getting over-written.  
  126.    Each element in a string array ends with ASCII 0.  This means that you 
  127.    must specifiy a SIZE value that is at least one greater than the maximum 
  128.    string length you are storing in the array.  For example, an array of 
  129.    strings in which the maximum length of string will be eight must have a 
  130.    SIZE parameter of at least NINE.
  131.  
  132. ****
  133.  
  134.  
  135. 2) I have a small program that reads in a file and sends it to the printer
  136. device.  The program worked perfectly in AmigaBASIC but after compiling it 
  137. with ACE I get a visit from the GURU.  Here's the code that is causing the
  138. problem:
  139.  
  140.  OPEN "O",2,"prt:"
  141.  OPEN "I",1,"app.form"
  142.  a$=INPUT$(LOF(1),1)
  143.  PRINT #2,a$
  144.  END
  145.  
  146.    If the file you are opening is larger than 1024 bytes (the default string
  147.    size) then you are attempting to put more information than can fit into a$.
  148.    You may either set the string size of a$ to a larger value, eg.
  149.  
  150.      STRING a$ SIZE 32768
  151.  
  152.    to get a 32K string, or you can dynamically allocate it at run-time:
  153.  
  154.      buffer = ALLOC(LOF(1)+1)  '..file size + 1 for null-terminator
  155.      IF buffer = 0& THEN STOP
  156.      STRING a$ ADDRESS buffer
  157.  
  158.    Is your file longer than 32K? If so, then that's the answer. As 
  159.    documented in ref.doc under INPUT$, the buffer for INPUT$ is currently 
  160.    32K. If you want to handle bigger files, allocate a buffer with ALLOC 
  161.    and read the file with xRead, so the above code becomes:
  162.  
  163.      DECLARE FUNCTION xRead& LIBRARY
  164.      DECLARE FUNCTION xWrite LIBRARY
  165.      OPEN "O",2,"prt:"
  166.      OPEN "I",1,"app.form"
  167.      ADDRESS buffer
  168.      buffer = ALLOC(LOF(1)) : IF buffer = 0& THEN cleanup
  169.      length = xRead(HANDLE(1),buffer,LOF(1))
  170.      IF length > 0 THEN xWrite(HANDLE(1),buffer,length)
  171.      cleanup:
  172.      CLOSE 1,2
  173.      END
  174.  
  175. ****
  176.  
  177.  
  178. 3) What's the deal with changing the status of trapping for a particular
  179.    event?
  180.  
  181.    In ACE, <event> ON | STOP | OFF must be used AT THE PLACE IN THE CODE
  182.    WHERE THE EFFECT IS DESIRED. You have to think of these ON|OFF|STOP
  183.    commands as compiler directives.
  184.  
  185.    This means that you can't expect to do the following:
  186.  
  187.     GOSUB change_break_status
  188.  
  189.     WHILE 1
  190.          PRINT "Gee I hope ctrl-c works here!"
  191.     WEND
  192.  
  193.    change_break_status:
  194.     ON BREAK GOTO quit
  195.     BREAK ON
  196.  
  197.    quit:
  198.     PRINT "***break!"
  199.     END
  200.  
  201. This won't work and your program will loop forever. The following _will_
  202. work however:
  203.  
  204.         ON BREAK GOTO quit
  205.         BREAK ON
  206.  
  207.         WHILE 1
  208.           PRINT "Gee I hope ctrl-c works here!"
  209.         WEND
  210.  
  211.    quit:
  212.         PRINT "***break!"
  213.     END
  214.  
  215. ****
  216.  
  217.  
  218. 4) Is it possible to change the value in a slider gadget after it has
  219. been created?
  220.  
  221.    Yes, there is a way to do this. You can use GADGET MOD for this purpose 
  222.    (I assume you are using ACE v2.3 or higher?).
  223.  
  224.    The syntax is: GADGET MOD id,knob-position[,max-position]
  225.  
  226.    So, one can say something like:
  227.  
  228.      GADGET 1,ON,10,(50,50)-(100,60),POTX
  229.      GADGET MOD 1,5 
  230.  
  231.    which would create a horiz. slider and then change the knob position to 5.
  232.  
  233.    As the syntax indicates one can also change the number of knob positions
  234.    (and hence the size of the knob).
  235.  
  236.    See ref.doc for further details under GADGET MOD and also
  237.    ACE:prgs/GUI/ACEgadgets.b for an example of where this is used (click on
  238.    the "Move" button). 
  239.  
  240. ****
  241.  
  242. 5) If I do not open a new window or screen from the ACE program, the
  243. INKEY$ function seems not to work flawlessly for me. My mistake, but
  244. I would like to learn why. I have set up a WHILE..WEND loop, like the 
  245. following:
  246.  
  247.          WHILE lastkey$<>""
  248.           SLEEP
  249.           lastkey$=inkey$
  250.          WEND
  251.  
  252.           IF lastkey$="A" THEN GOTO ENDPROGRAM
  253.           IF lastkey$="L" THEN '.... whatever follows
  254.  
  255. Well, I press "A" the